home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (PO) / Nibble Volume 10, No. 01 (1989-01)(MicroSPARC)(Side A)[a].zip / Nibble Volume 10, No. 01 (1989-01)(MicroSPARC)(Side A)[a].po / TRANS.S < prev    next >
Text File  |  1996-12-24  |  9KB  |  410 lines

  1. *
  2. * TRANS Source Code
  3. * By Jenny Schmidt
  4. * Copyright(c) 1988
  5. * MicroSPARC, Inc.
  6. * Concord, MA 01742
  7. *
  8. * Assembler: The Assembler
  9. *
  10. CHRGOT    EQU $B7        ;FETCH CHAR AT TXTPTR
  11. CHKCOM    EQU $DEBE      ;CHECK FOR COMMA AND ADVANCE TXTPTR
  12. COMBYTE   EQU $E74C      ;CHECK COMMA, FETCH INTEGER
  13. HPLOT     EQU $F457      ;HI-RES ROUTINES
  14. PLOT      EQU $F45A
  15. HPOSN     EQU $F411
  16. HLINE     EQU $F53A
  17. HCOLOR    EQU $F6F0
  18. BASE      EQU $26        ;BASE ADDRESS OF HI-RES COORDINATES
  19. BITPOS    EQU $30        ;BIT ON HI-RES SCREEN OF COORDINATES
  20. INCRX     EQU $F48A      ;MOVE ONE COORDINATE IN X DIRECTION
  21. FDIVT     EQU $EA69
  22. FACTOARG  EQU $EB63
  23. MEMTOFAC  EQU $EAF9      ;MOVE FLOATING POINT NUMBER TO FAC
  24. FACTOMEM  EQU $EB2B      ;MOVE FAC TO MEMORY
  25. COS       EQU $EFEA      ;COSINE FUNCTION
  26. SIN       EQU $EFF1      ;SINE FUNCTION
  27. FRMEVL    EQU $DD7B      ;EVALUATE FORMULA AT TXTPTR
  28. FMUL      EQU $E97F      ;MULTIPLY ROUTINE
  29. FADD      EQU $E7BE      ;ADD ROUTINE
  30. FSUB      EQU $E7A7      ;SUBTRACT ROUTINE
  31. FLOAT     EQU $E2F2      ;MOVE SIGNED INTEGER TO FAC
  32. FLOATBYTE EQU $E301      ;MOVE INTEGER BYTE TO FAC
  33. GETADR    EQU $E752      ;CONVERT FAC TO INTEGER
  34. LINNUM    EQU $50        ;RESULT OF GETADR
  35. INT       EQU $EBF2
  36. NUM       EQU $A0        ;RESULT OF INT. HIGH BYTE FIRST
  37. *
  38.           ORG $800
  39.           JSR CHKCOM     ;GET CALL PARAMETERS
  40.           JSR FRMEVL
  41.           JSR INT
  42.           LDA NUM
  43.           STA X1+1
  44.           LDA NUM+1
  45.           STA X1
  46.           JSR CHKCOM
  47.           JSR FRMEVL
  48.           JSR INT
  49.           LDA NUM
  50.           STA Y1+1
  51.           LDA NUM+1
  52.           STA Y1
  53.           JSR CHKCOM
  54.           JSR FRMEVL
  55.           JSR INT
  56.           LDA NUM
  57.           STA X2+1
  58.           LDA NUM+1
  59.           STA X2
  60.           JSR CHKCOM
  61.           JSR FRMEVL
  62.           JSR INT
  63.           LDA NUM
  64.           STA Y2+1
  65.           LDA NUM+1
  66.           STA Y2
  67.           JSR CHKCOM
  68.           JSR FRMEVL
  69.           JSR INT
  70.           LDA NUM
  71.           STA X3+1
  72.           LDA NUM+1
  73.           STA X3
  74.           JSR CHKCOM
  75.           JSR FRMEVL
  76.           JSR INT
  77.           LDA NUM
  78.           STA Y3+1
  79.           LDA NUM+1
  80.           STA Y3
  81.           JSR CHKCOM
  82.           JSR FRMEVL
  83.           JSR INT
  84.           LDA NUM
  85.           STA X4+1
  86.           LDA NUM+1
  87.           STA X4
  88.           JSR CHKCOM
  89.           JSR FRMEVL
  90.           JSR INT
  91.           LDA NUM
  92.           STA Y4+1
  93.           LDA NUM+1
  94.           STA Y4
  95.           JSR CHKCOM
  96.           JSR FRMEVL
  97.           LDX #SCALEX
  98.           LDY #SCALEX/
  99.           JSR FACTOMEM
  100.           JSR CHKCOM
  101.           JSR FRMEVL
  102.           LDX #SCALEY
  103.           LDY #SCALEY/
  104.           JSR FACTOMEM
  105.           JSR CHKCOM
  106.           JSR FRMEVL
  107.           LDX #COSOFANG
  108.           LDY #COSOFANG/
  109.           JSR FACTOMEM
  110.           JSR CHKCOM
  111.           JSR FRMEVL
  112.           LDX #SINOFANG
  113.           LDY #SINOFANG/
  114.           JSR FACTOMEM
  115.           JSR COMBYTE
  116.           STX FLAG
  117.           LDA Y1         ;COPY CONTENTS OF INITIAL BOX TO PAGE 2
  118.           STA YTEMP
  119.           LDY #0
  120.           LDA X2+1
  121.           BEQ NOHI
  122.           LDY #36
  123. NOHI      LDA X2
  124.           SEC
  125. DLOOP     SBC #7
  126.           INY
  127.           BCS DLOOP
  128.           STY XTEMP
  129. TLOOP     LDX X1
  130.           LDY X1+1
  131.           LDA YTEMP
  132.           JSR HPOSN
  133. T1LOOP    LDA (BASE),Y
  134.           PHA
  135.           LDA BASE+1
  136.           EOR #$60
  137.           STA BASE+1
  138.           PLA
  139.           STA (BASE),Y
  140.           INY
  141.           LDA BASE+1
  142.           EOR #$60
  143.           STA BASE+1
  144.           CPY XTEMP
  145.           BCC T1LOOP
  146.           INC YTEMP
  147.           LDA Y2
  148.           CMP YTEMP
  149.           BCS TLOOP
  150.           LDA Y1
  151.           STA YTEMP
  152.           JSR COMBYTE    ;MOVE OR COPY?
  153.           TXA
  154.           BEQ COPY
  155.           LDX #0         ;IF MOVE THEN ERASE CONTENTS OF SOURCE BOX ON PAGE 1
  156.           JSR HCOLOR
  157. T2LOOP    LDX X1
  158.           LDY X1+1
  159.           LDA YTEMP
  160.           JSR HPOSN
  161.           LDA X2
  162.           LDX X2+1
  163.           LDY YTEMP
  164.           JSR HLINE
  165.           INC YTEMP
  166.           LDA Y2
  167.           CMP YTEMP
  168.           BCS T2LOOP
  169. COPY      LDA X3
  170.           STA XTEMP
  171.           LDA X3+1
  172.           STA XTEMP+1
  173.           LDA Y3
  174.           STA YTEMP
  175.           LDA Y3+1
  176.           STA YTEMP+1
  177. XLOOP     LDA XTEMP      ;FOR I=X3 TO X4
  178.           SEC
  179.           SBC X3
  180.           TAY
  181.           LDA XTEMP+1
  182.           SBC X3+1
  183.           JSR FLOAT      ;CALCULATE (XTEMP-X3)*SCALEX+X1
  184.           LDY #SCALEX/
  185.           LDA #SCALEX
  186.           JSR FMUL
  187.           JSR INT
  188.           LDA NUM+1
  189.           CLC
  190.           ADC X1
  191.           STA XNEW
  192.           STA XTEMP2
  193.           LDA NUM
  194.           ADC X1+1
  195.           STA XNEW+1
  196.           STA XTEMP2+1
  197. YLOOP     LDA YTEMP      ;FORJ=Y3TOY4
  198.           SEC
  199.           SBC Y3
  200.           TAY
  201.           LDA YTEMP+1
  202.           SBC Y3+1
  203.           JSR FLOAT      ;CALCULATE (YTEMP-Y3)*SCALEY+Y1
  204.           LDY #SCALEY/
  205.           LDA #SCALEY
  206.           JSR FMUL
  207.           JSR INT
  208.           LDA NUM+1
  209.           CLC
  210.           ADC Y1
  211.           STA YNEW
  212.           LDA #0
  213.           STA YNEW+1
  214.           BIT FLAG
  215.           BMI SCREEN1
  216.           LDX XNEW       ;BLACK AND WHITE SCREEN FUNCTION
  217.           LDY XNEW+1
  218.           LDA YNEW
  219.           JSR HPOSN
  220.           LDA BASE+1
  221.           EOR #$60
  222.           STA BASE+1
  223.           LDA (BASE),Y
  224.           AND BITPOS
  225.           AND #$7F
  226.           BEQ BLACK
  227.           LDA (BASE),Y
  228.           BPL NOHI1
  229.           LDX #7
  230.           BNE NOBLACK
  231. NOHI1     LDX #3
  232.           BNE NOBLACK
  233. SCREEN1   STA TEMP1      ;COLOR SCREEN FUNCTION
  234.           STA TEMP1+1
  235.           LDA XNEW
  236.           AND #$FE
  237.           TAX
  238.           LDY XNEW+1
  239.           LDA YNEW
  240.           JSR HPOSN
  241.           LDA BASE+1
  242.           EOR #$60
  243.           STA BASE+1
  244.           LDA (BASE),Y
  245.           AND BITPOS
  246.           AND #$7F
  247.           BEQ OFF
  248.           SEC
  249.           ROL TEMP1
  250. OFF       LDA (BASE),Y
  251.           BPL NOHI2
  252.           LDA #4
  253.           STA TEMP1+1
  254. NOHI2     JSR INCRX
  255.           LDA (BASE),Y
  256.           AND BITPOS
  257.           AND #$7F
  258.           CLC
  259.           BEQ SKIP
  260.           SEC
  261. SKIP      ROL TEMP1
  262.           LDA (BASE),Y
  263.           BPL DONE
  264.           LDA #4
  265.           STA TEMP1+1
  266. DONE      LDA TEMP1
  267.           ORA TEMP1+1
  268.           TAX
  269.           AND #03
  270.           BNE NOBLACK
  271. BLACK     JMP NEXT
  272. NOBLACK   JSR HCOLOR     ;COLOR=SCREEN(XNEW,YNEW)
  273.                          ;XNEW=(XTEMP-X3)*COS(ANGLE)-(YTEMP-Y3)*SIN(ANGLE)/ASPECT+X3
  274.                          ;YNEW=(YTEMP-Y3)*COS(ANGLE)-(XTEMP-X3)*SIN(ANGLE)*ASPECT+Y3
  275.           LDA XTEMP
  276.           SEC
  277.           SBC X3
  278.           STA XNEW
  279.           LDA XTEMP+1
  280.           SBC X3+1
  281.           STA XNEW+1
  282.           LDA YTEMP
  283.           SEC
  284.           SBC Y3
  285.           STA YNEW
  286.           LDA YTEMP+1
  287.           SBC Y3+1
  288.           STA YNEW+1
  289.           LDY XNEW
  290.           LDA XNEW+1
  291.           JSR FLOAT
  292.           LDA #COSOFANG
  293.           LDY #COSOFANG/
  294.           JSR FMUL
  295.           LDX #TEMP1
  296.           LDY #TEMP1/
  297.           JSR FACTOMEM
  298.           LDY YNEW
  299.           LDA YNEW+1
  300.           JSR FLOAT
  301.           LDA #SINOFANG
  302.           LDY #SINOFANG/
  303.           JSR FMUL
  304.           LDA #TEMP1
  305.           LDY #TEMP1/
  306.           JSR FSUB
  307.           LDX #XFP
  308.           LDY #XFP/
  309.           JSR FACTOMEM
  310.           LDY YNEW
  311.           LDA YNEW+1
  312.           JSR FLOAT
  313.           LDA #COSOFANG
  314.           LDY #COSOFANG/
  315.           JSR FMUL
  316.           LDX #TEMP1
  317.           LDY #TEMP1/
  318.           JSR FACTOMEM
  319.           LDY XNEW
  320.           LDA XNEW+1
  321.           JSR FLOAT
  322.           LDA #SINOFANG
  323.           LDY #SINOFANG/
  324.           JSR FMUL
  325.           LDA #TEMP1
  326.           LDY #TEMP1/
  327.           JSR FADD
  328.           JSR INT
  329.           LDA NUM+1
  330.           CLC
  331.           ADC Y3
  332.           STA YNEW
  333.           LDA NUM
  334.           ADC Y3+1
  335.           BNE NEXT
  336.           LDA YNEW
  337.           CMP #192
  338.           BCS NEXT
  339.           LDA #XFP
  340.           LDY #XFP/
  341.           JSR MEMTOFAC
  342.           JSR INT
  343.           LDA NUM+1
  344.           CLC
  345.           ADC X3
  346.           STA XNEW
  347.           LDA NUM
  348.           ADC X3+1
  349.           STA XNEW+1
  350.           BEQ PLOTIT
  351.           CMP #2
  352.           BCS NEXT
  353.           LDA XNEW
  354.           CMP #24
  355.           BCS NEXT
  356. PLOTIT    LDX XNEW
  357.           LDY XNEW+1
  358.           LDA YNEW
  359.           JSR HPLOT
  360. NEXT      LDA YTEMP+1    ;NEXT J
  361.           CMP Y4+1
  362.           BNE NY
  363.           LDA YTEMP
  364.           CMP Y4
  365.           BEQ NEXT1
  366. NY        INC YTEMP
  367.           BNE SKIP1
  368.           INC YTEMP+1
  369. SKIP1     LDA XTEMP2
  370.           STA XNEW
  371.           LDA XTEMP2+1
  372.           STA XNEW+1
  373.           JMP YLOOP
  374. NEXT1     LDA XTEMP+1    ;NEXT I
  375.           CMP X4+1
  376.           BNE NX
  377.           LDA XTEMP
  378.           CMP X4
  379.           BEQ RETURN
  380. NX        INC XTEMP
  381.           BNE SKIP2
  382.           INC XTEMP+1
  383. SKIP2     LDA Y3
  384.           STA YTEMP
  385.           LDA Y3+1
  386.           STA YTEMP+1
  387.           JMP XLOOP
  388. RETURN    JSR CHRGOT
  389.           RTS
  390. X1        DFS 2
  391. Y1        DFS 2
  392. X2        DFS 2
  393. Y2        DFS 2
  394. X3        DFS 2
  395. Y3        DFS 2
  396. X4        DFS 2
  397. Y4        DFS 2
  398. TEMP1     DFS 5
  399. XFP       DFS 5
  400. XNEW      DFS 2
  401. YNEW      DFS 2
  402. COSOFANG  DFS 5
  403. SINOFANG  DFS 5
  404. XTEMP     DFS 2
  405. YTEMP     DFS 2
  406. XTEMP2    DFS 2
  407. SCALEX    DFS 5
  408. SCALEY    DFS 5
  409. FLAG      DFS 1
  410.